#include <unordered_set>
#include <vector>
#include <functional>
using namespace std;
class Solution
{
public:
    vector<vector<int>> permute(vector<int> &nums)
    {
        vector<int> temp;
        vector<vector<int>> res;
        unordered_set<int> book;
        function<void(int pos)> func([&](int pos) -> void
                                     {
            if(pos>=nums.size()){
                res.push_back(temp);
                return;
            }
            //这个pos位置可以是任何数
            for(int i=0;i<nums.size();i++){
                int num=nums[i];
                //记录之前出现过没有
                if(book.count(num))
                    continue;    
                book.insert(num);
                temp.push_back(num);
                func(pos+1);
                //回溯 恢复现场
                temp.pop_back();
                book.erase(num);
            } });
        func(0);
        return res;
    }
};